From: Georges Basile Stavracas Neto Date: Wed, 30 Dec 2020 22:59:02 +0000 (-0300) Subject: workspacesView/workspacesDisplay: Don't sync geometry when animating X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~616^2^2~482 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=b64103efca366ad017f44be8ab4e5e27e45b2bd3;p=gnome-shell.git workspacesView/workspacesDisplay: Don't sync geometry when animating Synchronizing the actual geometry while animating from / to the overview can break the animation. Let's prevent that. This code will go away soon anyway, but to not lose bisectability, it's better not to leave it misbehaving until then. Part-of: --- diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js index 36a15a71f..ac0729dd0 100644 --- a/js/ui/workspacesView.js +++ b/js/ui/workspacesView.js @@ -515,6 +515,7 @@ class WorkspacesDisplay extends St.Widget { this._gestureActive = false; // touch(pad) gestures this._canScroll = true; // limiting scrolling speed + this._animating = false; this.connect('destroy', this._onDestroy.bind(this)); } @@ -690,6 +691,8 @@ class WorkspacesDisplay extends St.Widget { } animateFromOverview() { + this._animating = true; + for (let i = 0; i < this._workspacesViews.length; i++) this._workspacesViews[i].animateFromOverview(); @@ -703,10 +706,13 @@ class WorkspacesDisplay extends St.Widget { x, y, width, height, duration: ANIMATION_TIME, mode: Clutter.AnimationMode.EASE_OUT_QUAD, + onStopped: () => (this._animating = false), }); } vfunc_hide() { + this._animating = false; + if (this._restackedNotifyId > 0) { Main.overview.disconnect(this._restackedNotifyId); this._restackedNotifyId = 0; @@ -739,6 +745,8 @@ class WorkspacesDisplay extends St.Widget { } _updateWorkspacesViews() { + this._animating = false; + for (let i = 0; i < this._workspacesViews.length; i++) this._workspacesViews[i].destroy(); @@ -815,6 +823,9 @@ class WorkspacesDisplay extends St.Widget { this._syncActualGeometryLater = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => { + if (this._animating) + return GLib.SOURCE_CONTINUE; + this._syncWorkspacesActualGeometry(); this._syncActualGeometryLater = 0;